package com.otaku.service;

import com.otaku.dao.CandyBlogMapper;
import com.otaku.exception.TipException;
import com.otaku.model.entity.CandyBlog;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;


import java.util.List;
import java.util.Optional;

import static com.otaku.common.SysConst.MAX_CANDY_BLOG_LENGTH;

/**
 * 作者：ganxiang <br>
 * 时间：2018年04月20日 10:18<br>
 * 标题：CandyBlogService<br>
 * 功能：微博（暂定）service<br>
 */
@Service
@Log4j2
@Validated
public class CandyBlogService {
    @Autowired
    private CandyBlogMapper candyBlogMapper;

    /**
     * 新增微博（暂定）
     *
     * @param candyBlog 微博（暂定）
     * @return 新增微博（暂定）的主键
     */
    public Long create(CandyBlog candyBlog) {
        if (candyBlog == null)
            throw new TipException("微博对象为空");
        if (candyBlog.getOpenId() == null)
            throw new TipException("微信id不能为空");
        if (candyBlog.getAuthorName() == null)
            throw new TipException("作者不能为空");
        if (candyBlog.getContent() == null)
            throw new TipException("微博内容不能为空");
        if (candyBlog.getContent().length() > MAX_CANDY_BLOG_LENGTH)
            throw new TipException("微博最多可以输入" + MAX_CANDY_BLOG_LENGTH + "个字符");

        candyBlogMapper.save(candyBlog);
        Long id = candyBlog.getId();
        return id;
    }

    /**
     * 编辑微博
     *
     * @param candyBlog 微博（暂定）
     */
    public void update(CandyBlog candyBlog) {
        candyBlogMapper.save(candyBlog);
    }

    /**
     * 根据id查找
     *
     * @param id 微博id
     * @return 微博详情
     */
    public CandyBlog findById(Long id) {
        Optional<CandyBlog> result = candyBlogMapper.findById(id);
        if (result.isPresent()) {
            return result.get();
        }
        throw new TipException("查找失败，当前微博不存在");
    }

    /**
     * 搜索
     *
      * @return 微博列表
     */
    public List<CandyBlog> query() {
        //TODO 条件&分页查询
        return candyBlogMapper.findAll();
    }
}
